blob: b46390fddd727ba0688b67523476bfdec5ece589 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.beans.addproperty;
import com.sun.source.tree.ClassTree;
import com.sun.source.tree.Tree;
import com.sun.source.util.SourcePositions;
import java.io.IOException;
import java.util.List;
import javax.swing.text.Document;
import org.netbeans.api.java.source.CodeStyle;
import org.netbeans.api.java.source.CompilationInfo;
import org.netbeans.api.java.source.GeneratorUtilities;
import org.netbeans.api.java.source.TreeMaker;
import org.netbeans.api.java.source.WorkingCopy;
import org.netbeans.editor.GuardedDocument;
import org.openide.ErrorManager;
import org.openide.filesystems.FileObject;
/**
* Copy of org.netbeans.modules.java.editor.codegen.GeneratorUtils
* @author Jan Lahoda, Dusan Balek
*/
public final class GeneratorUtils {
private GeneratorUtils() {
}
public static ClassTree insertClassMembers(WorkingCopy wc, ClassTree clazz, List<? extends Tree> members, int offset) throws IllegalStateException {
if (offset < 0 || getCodeStyle(wc).getClassMemberInsertionPoint() != CodeStyle.InsertionPoint.CARET_LOCATION)
return GeneratorUtilities.get(wc).insertClassMembers(clazz, members);
int index = 0;
SourcePositions sp = wc.getTrees().getSourcePositions();
GuardedDocument gdoc = null;
try {
Document doc = wc.getDocument();
if (doc != null && doc instanceof GuardedDocument)
gdoc = (GuardedDocument)doc;
} catch (IOException ioe) {}
Tree lastMember = null;
for (Tree tree : clazz.getMembers()) {
if (offset <= sp.getStartPosition(wc.getCompilationUnit(), tree)) {
if (gdoc == null)
break;
int pos = (int)(lastMember != null ? sp.getEndPosition(wc.getCompilationUnit(), lastMember) : sp.getStartPosition(wc.getCompilationUnit(), clazz));
pos = gdoc.getGuardedBlockChain().adjustToBlockEnd(pos);
if (pos <= sp.getStartPosition(wc.getCompilationUnit(), tree))
break;
}
index++;
lastMember = tree;
}
TreeMaker tm = wc.getTreeMaker();
for (int i = members.size() - 1; i >= 0; i--) {
clazz = tm.insertClassMember(clazz, index, members.get(i));
}
return clazz;
}
private static CodeStyle getCodeStyle(CompilationInfo info) {
if (info != null) {
try {
Document doc = info.getDocument();
if (doc != null) {
CodeStyle cs = (CodeStyle)doc.getProperty(CodeStyle.class);
return cs != null ? cs : CodeStyle.getDefault(doc);
}
} catch (IOException ioe) {
// ignore
}
FileObject file = info.getFileObject();
if (file != null) {
return CodeStyle.getDefault(file);
}
}
return CodeStyle.getDefault((Document)null);
}
}